import router from './index'
import { useUserStore } from '@/stores/user'
import { showToast } from 'vant'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

NProgress.configure({ showSpinner: false })

// 白名单路由
const whiteList = ['/login', '/register']

// 医生路由前缀
const doctorRoutePrefix = '/doctor'
// 患者路由前缀
const patientRoutePrefix = '/patient'

router.beforeEach(async (to, from, next) => {
  NProgress.start()
  const userStore = useUserStore()

  // 已登录
  if (userStore.isLoggedIn) {
    if (to.path === '/login') {
      next('/')
      NProgress.done()
    } else {
      try {
        // 如果没有用户信息，获取用户信息
        if (!userStore.userInfo.roleId) {
          await userStore.getUserInfo()
        }

        // 检查路由权限
        const roleId = userStore.roleId
        const path = to.path

        // 医生访问患者路由
        if (userStore.isDoctor && path.startsWith(patientRoutePrefix)) {
          showToast('暂无权限访问患者端功能')
          next(from.path || '/doctor') // 返回上一页或医生首页
          return
        }

        // 患者访问医生路由
        if (userStore.isPatient && path.startsWith(doctorRoutePrefix)) {
          showToast('暂无权限访问医生端功能')
          next(from.path || '/patient') // 返回上一页或患者首页
          return
        }

        // 其他情况放行
        next()
      } catch (error) {
        showToast('获取用户信息失败，请重新登录')
        await userStore.logout()
        next(`/login?redirect=${to.path}`)
      }
    }
  }
  // 未登录
  else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      showToast('请先登录')
      next(`/login?redirect=${to.path}`)
    }
  }
})

router.afterEach(() => {
  NProgress.done()
})
